package com.bruip.controller;

import com.bruip.pojo.User;
import com.sun.org.apache.xml.internal.security.keys.keyresolver.implementations.KeyInfoReferenceResolver;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * @author 王若龙
 * @CreateTime 2022-09-05 15:27
 * <p>
 * 获取请求参数的方式：；
 * 1.通过servletAPI获取
 *  只需要在控制器方法的形参位置设置HttpServletRequest类型的参数，就可以在控制器方法中使用request对象获取请求参数
 * 2.通过控制器方法的形参获取
 *  只需要在控制器方法的参数位置，设置一个形参，形参的名字和请求参数的名字保持一致即可
 * 3.@RequestParam:将请求参数和控制器方法的参数绑定
 *  value: 设置和形参绑定的请求参数的名字
 *  require：设置是否必须传输value所对应的请求参数
 *      默认值为true，表示value所对应的参数必须传输，否则报错
 *  defaultValue：设置当没有传输value所对应的请求参数时，为形参设置默认值，此时与require无关
 * 4.@RequestHeader是将请求头信息和控制器方法的形参创建映射关系
 * 5.@CookieValue是将cookie数据和控制器方法的形参创建映射关系
 * 6.通过控制器方法的实体类类型的形参获取请求参数
 *  需要在控制器方法的形参位置设置实体类类型的形参，要保证实体类中的属性的属性名和请求参数码保持一致
 *  就可以通过实体类类型的形参获取请求参数
 * 7.在web.xml中配置编码过滤器
 */
@Controller
@RequestMapping("/param")
public class TestParamController {

    @RequestMapping("/servletAPI")
    public String getParamByServletApI(HttpServletRequest request) {
        HttpSession session = request.getSession();
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("username = " + username);
        System.out.println("password = " + password);
        return "success";
    }


    @RequestMapping("/param")
    public String getParamByParam(
            @RequestParam(value = "username", required = false, defaultValue = "米秀锦") String name,
            String password,
            @RequestHeader("referer") String referer,
            @CookieValue("JSESSIONID") String session
    ) {
        System.out.println("referer = " + referer);
        System.out.println("session = " + session);
        System.out.println("username = " + name);
        System.out.println("password = " + password);
        return "success";
    }

    @RequestMapping("/pojo")
    public String getParamByPojo(User user){
        System.out.println("user = " + user);
        return "success";
    }
}
